using System;
using System.Collections;
using System.Data;
using System.Data.SqlClient;
using Microsoft.ApplicationBlocks.Data;
using Common;
using DataAccess;
using SystemFrameworks;

namespace BusinessRules
{
	/// <summary>
	/// Clase de acceso a datos para la entidad Demoras
	/// </summary>
	public class EncuestasPreguntas : SINIC
	{
		#region Private Data Access Atributes

		private const String ENC_ID_PARAM = "@ENC_ID";
		private const String PRE_ID_PARAM = "@PRE_ID";
		private const String RES_ID_PARAM = "@RES_ID";
		private const String PRE_PREGUNTAS_ENCUESTAS_PARAM = "@PRE_PREGUNTAS_ENCUESTAS";
		private const String COUNTER_PARAM = "@COUNTER";

		#endregion Private Data Access Atributes

		/// <summary>
		/// Constructor de la clase Mod_preguntas_encuestas
		/// </summary>
        public EncuestasPreguntas(string strCadenaConecxion)
		{
            CadenaConexion = strCadenaConecxion;
		}

        private string _CadenaConexion;

        public string CadenaConexion
        {
            get { return _CadenaConexion; }
            set { _CadenaConexion = value; }
        }

		public EncuestasPreguntasData BuscarEncuestasPreguntas()
		{
			EncuestasPreguntasData response = new EncuestasPreguntasData();
            SqlHelper.ExecuteDataTable(CadenaConexion, CommandType.StoredProcedure, "PAS_BUSCAR_MOD_PREGUNTAS_ENCUESTAS", response.Tables[0]);
			if (response.Tables[0].Rows.Count == 0)
				return null;
			return response;
		}

		public EncuestasPreguntasData ConsultarEncuestasPreguntas(string Id)
		{
			EncuestasPreguntasData response = new EncuestasPreguntasData();
			SqlParameter param1 = new SqlParameter(ENC_ID_PARAM, Id);
			SqlParameter[] parameters = {param1};
			SqlHelper.ExecuteDataTable(CadenaConexion, CommandType.StoredProcedure, "PAS_CONSULTAR_MOD_PREGUNTAS_ENCUESTAS", response.Tables[0], parameters);
			if (response.Tables[0].Rows.Count == 0)
				return null;
			return response;
		}

		public EncuestasPreguntasData ConsultarEncuestasPreguntasPublico(string Id)
		{
			EncuestasPreguntasData response = new EncuestasPreguntasData();
			SqlParameter param1 = new SqlParameter(ENC_ID_PARAM, Id);
			SqlParameter[] parameters = {param1};
			SqlHelper.ExecuteDataTable(CadenaConexion, CommandType.StoredProcedure, "PAS_CONSULTAR_MOD_PREGUNTAS_ENCUESTAS_PUBLICO", response.Tables[0], parameters);
			if (response.Tables[0].Rows.Count == 0)
				return null;
			return response;
		}

		public EncuestasPreguntasData ConsultarEncuestasPreguntasUno(string Id)
		{
			EncuestasPreguntasData response = new EncuestasPreguntasData();
			SqlParameter param1 = new SqlParameter(ENC_ID_PARAM, Id);
			SqlParameter[] parameters = {param1};
			SqlHelper.ExecuteDataTable(CadenaConexion, CommandType.StoredProcedure, "PAS_CONSULTAR_MOD_PREGUNTAS_ENCUESTAS_UNO", response.Tables[0], parameters);
			if (response.Tables[0].Rows.Count == 0)
				return null;
			return response;
		}

		public EncuestasPreguntasData ConsultarEncuestasPreguntasRespuestas(string IdRes)
		{
			EncuestasPreguntasData response = new EncuestasPreguntasData();
			SqlParameter param1 = new SqlParameter(RES_ID_PARAM, IdRes);
			SqlParameter[] parameters = {param1};
			SqlHelper.ExecuteDataTable(CadenaConexion, CommandType.StoredProcedure, "PAS_CONSULTAR_MOD_PREGUNTAS_ENCUESTAS_RESPUESTA", response.Tables[0], parameters);
			if (response.Tables[0].Rows.Count == 0)
				return null;
			return response;
		}

		public decimal ConsultarNumeroPreguntas(decimal EncId)
		{
			decimal objReturn;
			try
			{
				SqlParameter param1 = new SqlParameter(COUNTER_PARAM, SqlDbType.Decimal);
				param1.Direction = ParameterDirection.Output;
				SqlParameter param2 = new SqlParameter(ENC_ID_PARAM, EncId);
				SqlParameter[] parameters = {param1, param2};
				SqlHelper.ExecuteNonQuery(CadenaConexion, CommandType.StoredProcedure, "PAS_CUENTA_PREGUNTAS_ENCUESTA", parameters);
				objReturn = decimal.Parse(param1.Value.ToString());
				if (objReturn == 0)
					return 0;
				else
					return objReturn;

			}
			catch (Exception ex)
			{
				throw new ApplicationExceptionManager(Utilidad.TraerMensaje("gmsgErrorConsultar", "Total Puntaje del Proyectos"), ex);
			}

		}

		public decimal AdicionarEncuestasPreguntas(EncuestasPreguntasData datos)
		{
			decimal intPre_Id = 0;
			DataTable tabla = datos.Tables[EncuestasPreguntasData.MOD_PREGUNTAS_ENCUESTAS_TABLE];
			SqlConnection objConnection = new SqlConnection(CadenaConexion);
			objConnection.Open();
			SqlTransaction objTrans = objConnection.BeginTransaction(IsolationLevel.Serializable);
			try
			{
				foreach (DataRow row in tabla.Rows)
				{
					SqlParameter param1 = new SqlParameter(PRE_ID_PARAM, SqlDbType.Decimal);
					param1.Direction = ParameterDirection.Output;
					SqlParameter param2 = new SqlParameter(ENC_ID_PARAM, row[EncuestasPreguntasData.ENC_ID_FIELD]);
					SqlParameter param3 = new SqlParameter(RES_ID_PARAM, row[EncuestasPreguntasData.RES_ID_FIELD]);
					SqlParameter param4 = new SqlParameter(PRE_PREGUNTAS_ENCUESTAS_PARAM, row[EncuestasPreguntasData.PRE_PREGUNTAS_ENCUESTAS_FIELD]);
					SqlParameter[] parameters = {param1, param2, param3, param4};
					SqlHelper.ExecuteNonQuery(CadenaConexion, CommandType.StoredProcedure, "PAS_ADICIONAR_MOD_PREGUNTAS_ENCUESTAS", parameters);
					intPre_Id = decimal.Parse(param1.Value.ToString());
				}
				objTrans.Commit();
			}
			catch (SqlException sqlEx)
			{
				objTrans.Rollback();
				throw new ApplicationExceptionManager(Utilidad.DisplaySqlErrors(sqlEx, "Entidades"), sqlEx);
			}
			catch (Exception ex)
			{
				objTrans.Rollback();
				throw new ApplicationExceptionManager(Utilidad.TraerMensaje("gmsgErrorInsertar", "Entidades"), ex);
			}
			finally
			{
				objConnection.Close();
			}
			return (intPre_Id);
		}

		public decimal AdicionarEncuestasPreguntas(string strENC_ID, string strRES_ID, string strPRE_PREGUNTAS_ENCUESTAS)
		{
			decimal intPre_Id = 0;
			try
			{
				SqlParameter param1 = new SqlParameter(PRE_ID_PARAM, SqlDbType.Decimal);
				param1.Direction = ParameterDirection.Output;
				SqlParameter param2 = new SqlParameter(ENC_ID_PARAM, strENC_ID);
				SqlParameter param3 = new SqlParameter(RES_ID_PARAM, strRES_ID);
				SqlParameter param4 = new SqlParameter(PRE_PREGUNTAS_ENCUESTAS_PARAM, strPRE_PREGUNTAS_ENCUESTAS);
				SqlParameter[] parameters = {param1, param2, param3, param4};
				SqlHelper.ExecuteNonQuery(CadenaConexion, CommandType.StoredProcedure, "PAS_ADICIONAR_MOD_PREGUNTAS_ENCUESTAS", parameters);
				intPre_Id = decimal.Parse(param1.Value.ToString());
			}
			catch (SqlException sqlEx)
			{
				throw new ApplicationExceptionManager(Utilidad.DisplaySqlErrors(sqlEx, "PAS_ADICIONAR_MOD_PREGUNTAS_ENCUESTAS"), sqlEx);
			}
			catch (Exception ex)
			{
				throw new ApplicationExceptionManager(Utilidad.TraerMensaje("gmsgErrorInsertar", "PAS_ADICIONAR_MOD_PREGUNTAS_ENCUESTAS"), ex);
			}
			return (intPre_Id);
		}

		public void ActualizarEncuestasPreguntas(EncuestasPreguntasData datos)
		{
			DataTable tabla = datos.Tables[EncuestasPreguntasData.MOD_PREGUNTAS_ENCUESTAS_TABLE];
			try
			{
				foreach (DataRow row in tabla.Rows)
				{
					SqlParameter param1 = new SqlParameter(ENC_ID_PARAM, row[EncuestasPreguntasData.ENC_ID_FIELD]);
					SqlParameter param2 = new SqlParameter(PRE_ID_PARAM, row[EncuestasPreguntasData.PRE_ID_FIELD]);
					SqlParameter param3 = new SqlParameter(RES_ID_PARAM, row[EncuestasPreguntasData.RES_ID_FIELD]);
					SqlParameter param4 = new SqlParameter(PRE_PREGUNTAS_ENCUESTAS_PARAM, row[EncuestasPreguntasData.PRE_PREGUNTAS_ENCUESTAS_FIELD]);
					SqlParameter[] parameters = {param1, param2, param3, param4};
					SqlHelper.ExecuteNonQuery(CadenaConexion, CommandType.StoredProcedure, "PAS_ACTUALIZAR_MOD_PREGUNTAS_ENCUESTAS", parameters);
				}
			}
			catch (Exception ex)
			{
				throw new ApplicationExceptionManager(Utilidad.TraerMensaje("gmsgErrorActualizar", "PreguntasEncuestas"), ex);
			}
		}

		/// <summary>
		/// Elimina un registro de la entidad
		/// </summary>
		/// <param name="Id">Identificador del registro</param>
		public void EliminarEncuestasPreguntas(string Id)
		{
			try
			{
				SqlParameter param1 = new SqlParameter(PRE_ID_PARAM, Id);
				SqlParameter[] parameters = {param1};
				SqlHelper.ExecuteNonQuery(CadenaConexion, CommandType.StoredProcedure, "PAS_ELIMINAR_MOD_PREGUNTAS_ENCUESTAS", parameters);
			}
			catch (Exception ex)
			{
				throw new ApplicationExceptionManager(Utilidad.TraerMensaje("gmsgErrorEliminar", "PreguntasEncuestas"), ex);
			}
		}

		public void EliminarEncuestasPreguntasIDENC(string IdEnc)
		{
			try
			{
				SqlParameter param1 = new SqlParameter(ENC_ID_PARAM, IdEnc);
				SqlParameter[] parameters = {param1};
				SqlHelper.ExecuteNonQuery(CadenaConexion, CommandType.StoredProcedure, "PAS_ELIMINAR_MOD_PREGUNTAS_ENCUESTAS_IDENC", parameters);
			}
			catch (Exception ex)
			{
				throw new ApplicationExceptionManager(Utilidad.TraerMensaje("gmsgErrorEliminar", "PreguntasEncuestas"), ex);
			}
		}

		public void EliminarEncuestasPreguntas(ArrayList arrIDs)
		{
			SqlConnection objConnection = new SqlConnection(ConnectionString);
			objConnection.Open();
			SqlTransaction objTrans = objConnection.BeginTransaction();

			try
			{
				foreach (object Item in arrIDs)
				{
					SqlParameter param1 = new SqlParameter(ENC_ID_PARAM, decimal.Parse(Item.ToString()));
					SqlParameter[] parameters = {param1};
					SqlHelper.ExecuteNonQuery(objTrans, CommandType.StoredProcedure, "PAS_ELIMINAR_MOD_PREGUNTAS_ENCUESTAS_IDENC", parameters);
				}
				objTrans.Commit();
			}
			catch (SqlException sqlEx)
			{
				objTrans.Rollback();
				throw new ApplicationExceptionManager(Utilidad.DisplaySqlErrors(sqlEx, "PreguntasEncuestas"), sqlEx);
			}
			catch
			{
				objTrans.Rollback();
				throw new ApplicationExceptionManager(Utilidad.TraerMensaje("gmsgErrorEliminar", "PreguntasEncuestas"));
			}
			finally
			{
				objConnection.Close();
			}
		}

	}
}